<?php

/**
 * 公共函数
 * @author bing.peng
 * 
 */

/**
 * 类加载函数
 * 
 * @param $class
 * @param $instantiate
 * @return obj
 */
function load_class( $class, $instantiate=TRUE ) {
	static $objects = array();
	
	// 从静态对象数组中查找类实例，如果存在返回对象实例
	if ( isset($objects[$class]) ) {
		return $objects[$class];
	}

	// 导入库文件
	if( file_exists( EVAPATH . 'libs/' . $class . '.php' ) ) {
		require( EVAPATH . 'libs/'. $class .'.php' );
	}
	else {
		exit("The '$class' lib does not exist.");
	}
	
	// 如果不需要实例化则直接返回
	if ( $instantiate == FALSE ) {
		$objects[$class] = TRUE;
		return $objects[$class];
	}

	// 实例化类，并将实例化对象存在静态数组中，然后返回该对象
	$objects[$class] = new $class();
	return $objects[$class];
	
}

function import($src) {
	require( APPPATH . 'actions/' . $source );
}

/**
 * 获取配置信息
 * @return array();
 */
function get_config() {
	static $main_conf;
	
	if( ! isset($main_conf) ) {
		if( ! file_exists( ABSPATH . 'configs.php' ) ) {
			exit('The configuration file config.php does not exist.');
		}
		
		require( ABSPATH . 'configs.php' );

		if ( ! isset($config) OR ! is_array($config)) {
			exit('Your config file does not appear to be formatted correctly.');
		}
		$main_conf = $config;
	}
	return $main_conf;
}

function get_domain() {
	$domain = $_SERVER ['HTTP_HOST'];
	if(preg_match('/www.*/', $domain)) {
		$domain = str_replace( 'www.', '', $domain );	
	}
	return $domain;
}

/**
 * 获取基础URL
 * @return string
 */
function base_url() {
	$config = get_config();
	return $config['base_url'];
	//return 'http://'.$_SERVER ['HTTP_HOST'] . '/';
}

/**
 * 构造网站URL
 * @param $uri
 * @return string
 */
function site_url($uri) {
	$config = get_config();
	return base_url() . $config['index_page'] . '/' . $uri;
}

/**
 * 请求重定向
 * @param $uri
 * @return unknown_type
 */
function redirect($uri) {
	header("Location:" . site_url($uri));
}

/**
 * 404请求处理，显示404页面
 * 如果用户自定义了404页面，显示用户自定错误处理页
 * 如果用户没有定义404页面，则显示系统自带的404页面
 * @return void
 */
function show_error_404() {
	if( file_exists(APPPATH . 'errors/error_404.php') ) { 
		ob_start();
		include(APPPATH . 'errors/error_404.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		echo $buffer;
		exit;
	}
	else {
		ob_start();
		include(EVAPATH . 'errors/error_404.php');
		$buffer = ob_get_contents();
		ob_end_clean();
		echo $buffer;
		exit;
	}
}

/**
 * 显示错误信息
 * @param $message
 * @return void
 */
function show_error( $message ) {
	$ex = load_class('exceptions');
	$ex->show_error('An Error Was Encountered', $message);
	exit;
}

/**
 * PHP错误处理句柄
 * @param $severity
 * @param $message
 * @param $filepath
 * @param $line
 * @return void
 */
function _exception_handler($severity, $message, $filepath, $line) {
	if ($severity == E_STRICT) {
		return;
	}
	$ex = load_class('exceptions');
	$ex->show_php_error($severity, $message, $filepath, $line);
	exit;
}


/**
 * 文件日志函数
 * @param $message
 * @return void
 */
function log_message($message) {
	$config = get_config();
	if( $config['debug'] ) {
		$file_name =  ABSPATH . 'logs/' . date('Y-m-d') . '.log';
		$fp = fopen( $file_name, 'a+' );
		$message .= '\n';
		fwrite($fp, $message);
		fclose($fp);
	}
}

?>